package br.com.fsa.aplication.Services;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import br.com.fsa.aplication.Database.ConhecimentoDAO;
import br.com.fsa.aplication.Database.MotoristaDAO;
import br.com.fsa.aplication.Database.NotaFiscalDAO;
import br.com.fsa.aplication.Database.CaminhaoDAO;
import br.com.fsa.aplication.Database.CaminhaoDAO;
import br.com.fsa.aplication.Exception.ConectionException;
import br.com.fsa.aplication.Model.NotaFiscalVO;
import br.com.fsa.aplication.Model.bean.Caminhao;
import br.com.fsa.aplication.Model.bean.Conhecimento;
import br.com.fsa.aplication.Model.bean.ConhecimentoStatus;
import br.com.fsa.aplication.Model.bean.Motorista;
import br.com.fsa.aplication.Model.bean.NotaFiscal;
import br.com.fsa.aplication.Model.bean.NotaFiscalStatus;
import br.com.fsa.aplication.Util.Traduzir;

public class ConhecimentoService {

	private ConhecimentoDAO dao = new ConhecimentoDAO();

	public HashMap salvar(HashMap dto) throws ConectionException {

		Object o = Traduzir.ObjetoValor(dto.get("objeto"));
		NotaFiscalDAO daoNF = new NotaFiscalDAO();
		List x = new ArrayList();
		
		for (Object i : ((ArrayList) dto.get("notas"))) {
			x.add(daoNF.getById((Serializable)((NotaFiscalVO)i).getNfID()));
			((NotaFiscal)x.get(x.size()-1)).setStatus(NotaFiscalStatus.Entregue);
			((NotaFiscal)x.get(x.size()-1)).setConhecimento((Conhecimento)o);
		}
		
		CaminhaoDAO daoCam = new CaminhaoDAO();
		MotoristaDAO daoMot = new MotoristaDAO();
		Motorista mot = daoMot.getById((Serializable)dto.get("idMot"));
		Caminhao cam = daoCam.getById((Serializable)dto.get("idVeiculo"));
		((Conhecimento)o).setListaNotaFiscal(x);
		((Conhecimento)o).setMotorista(mot);
		((Conhecimento)o).setVeiculo(cam);
		((Conhecimento)o).setConhecimentoStatus(ConhecimentoStatus.Emitido);
		dao.update(((Conhecimento)o));
		
		
		/*
		for (Object i : ((ArrayList) dto.get("notas"))) {
			i = Traduzir.ObjetoValor(i);
			nf.add(i);
			((NotaFiscal) i).setConhecimento((Conhecimento) o);
		}

		
		((Conhecimento) o).setListaNotaFiscal(nf);
		
		*/
		ConhecimentoClientSCN clientWS = new ConhecimentoClientSCN((Conhecimento)o, false);
		boolean retorno = clientWS.enviarConhecimento();
		
		dto.put("resposta", retorno);
		return dto;

	}

}
